<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="referrer" content="never">
    <title>关于原型的方法</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
    </style>
</head>
<body>
    
    <script type="text/javascript">
        /* 
        object.isPrototypeof(obj);  判断某个对象是否是另一个对象的原型

        以下划线开头的属性表示为受保护的属性，程序员默认规则不能修改受保护的属性
        */
        
        var obj = {
            name: "李白",
            age: 24
        }

        var anotherObj = {
            name: "苏轼",
            age: 16
        }

        console.log(Object.prototype.isPrototypeOf(obj)); // true
        
        /* 
        Object.setPrototypeOf(obj, 原型)   设置对象的原型
        Object.getPrototypeOf(obj)   获取对象的原型
        
        object.__proto__ = xx
        */
       console.log(Object.getPrototypeOf(obj)); // Object.prototype
       Object.setPrototypeOf(obj, anotherObj);

       console.log("anotherObj.isPrototypeOf(obj)", anotherObj.isPrototypeOf(obj)); // true
       
       obj.__proto__ = Object.prototype;
       console.log("anotherObj.isPrototypeOf(obj)", anotherObj.isPrototypeOf(obj)); // true
        

       // obj instanceof 构造函数  判断对象是否是构造函数的实例
        console.log(obj instanceof Object); // true
        console.log([] instanceof Array); // true
        console.log([] instanceof Object); // true

        function User(){
            
        }
        var user = new User();

        console.log(user instanceof User); // true


        // object.hasOwnProperty(属性名)  判断某属性是否在对象自身的属性
        console.log("69", obj.hasOwnProperty("name")); // true
        console.log("70", obj.hasOwnProperty("toString")); // false
        console.log("71", obj.hasOwnProperty("age")); // true
    </script>
</body>
</html>